草庐IT

c++ - GLUT 和 C++ 类

全部标签

c++ - 用鼠标在 OpenGL GLUT 中绘制多边形

我想在openGLGlut中通过鼠标交互绘制一个多边形,每次左键单击都将是一个顶点,并且将在每个顶点之间绘制一条线。单击鼠标右键时,多边形将关闭从最后一个顶点到第一个顶点绘制一条线。我想到了这个,但它似乎不起作用。voiddraw_polygon(intbutton,intstate,intx,inty){boolright_pushed=0;glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POINTS);if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN){p1.x=x;p1.y=480-y;//ifrighti

c++ - 如何获取给定 HWND 的工具提示文本?

我正在寻找一种方法来获取与给定HWND关联的工具提示控件(如果有)。工具提示控件的文本也足够了。我找到的最接近的是TTM_GETTEXT消息,但它意味着要发送到工具提示控件本身,而不是与其关联的工具。虽然我没有工具提示控件的句柄。有人知道怎么做吗?所有这些都是使用C++中的普通WindowsAPI完成的。 最佳答案 似乎没有从控件获取提示或其文本的特定消息,但这是MFC的CWnd类实现OnToolHitTest()的方式,您应该能够适应Win32:INT_PTRSomeFunction(HWNDhWndChild,TOOLINFO*

c++ - 如何避免在 C/C++ API 中对字符串进行编码混淆?

我正致力于在C和C++中实现不同的API,并且想知道有哪些技术可用于避免客户端在从框架接收字符串或将它们传回时出现编码错误。例如,想象一个简单的C++插件API,客户可以实现它来影响翻译。它可能具有这样的功能:constchar*getTranslatedWord(constchar*englishWord);现在,假设我想强制所有字符串都以UTF-8格式传递。当然我会记录这个要求,但我希望编译器强制执行正确的编码,也许通过使用专用类型。例如,像这样:classWord{public:staticWordfromUtf8(constchar*data){returnWord(data)

c++ - 编写一个经常更改的类/结构

总结:我有一个读取/写入文件的结构。此结构经常更改,这导致我的read()函数变得复杂。我需要找到一种处理变更的好方法,同时保持低错误数。最理想的情况是,代码应该让人们很容易发现版本之间的变化。我已经考虑了几种模式,但我不知道我是否已经考虑了所有可能的选项。如您所见,代码大部分是C类的,但我正在将其转换为C++。详情正如我所说,我的结构经常变化(几乎在程序的每个版本中)。一些成员被删除,一些成员被添加,一些变得更复杂。新成员出现结构不是简单的情况。到目前为止,对结构的更改已按如下方式处理:在version_1中,我使用了颜色映射表:structObj{intcolor_index;};

c++ - 如何判断一个文件是否已经关闭

我正在编写一个单元测试,我正在尝试找到一种方法来测试我的类是否已正确关闭文件句柄(它使用旧式的open()和close())。理想情况下,我希望能够在不访问实际句柄的情况下执行此操作-我希望能够检查文件系统中的文件并确定它当前是否在其他地方打开。我试过通过独占文件锁来做到这一点,但运气不佳。此外,文件锁非常不能跨平台(这需要在Solaris、Linux和Windows上工作)。有什么建议吗? 最佳答案 如果您想知道文件系统中的给定文件是否被机器上的某个进程打开,可以使用一个名为lsof的有用工具。对于各种unix和类unix系统,它

c++ - 在 Cocoa 应用程序中使用大型 C++ 库的推荐方法?

我正在尝试开发一个可以“堆叠”FITS图像的应用程序。要读取FITS图像,我可以使用CCFits(一个C++库)或CFITSIO(一个C库)——没有原生的Objective-C库。我更愿意使用CCFits,因为它允许面向对象的设计,我希望这能让我更好地组织程序。我已经尝试过使用CFITSIO,但一段时间后它变得相当笨拙(当然,这可能是因为我在开发大型应用程序方面缺乏经验)。总的来说,解决这个问题的最佳方法是什么?我应该为CFITSIO函数编写包装器并编写我自己的类吗?有没有办法在Objective-C中使用C++类-该库包含很多类,我知道我可以使用不透明指针来环绕这些类,但是如何保留类

c++ - 使用带有自定义释放器的 std::unique_ptr 来包装原始指针

我正在尝试使用libsvm对于某个复杂的应用程序,并且由于libsvm主要是一个C库,因此在加载某些数据后,必须使用自定义API函数来释放内存。这就是我的意思:structsvm_model*model;model=svm_load_model("pathtomodelfile");//dosomeprocessingsvm_free_and_destroy_model(&this->model);这些是我使用的libsvmAPI函数的定义:structsvm_model*svm_load_model(constchar*model_file_name);voidsvm_free_an

c++ - 在包含文件名中使用项目目录

我正在开发仅C++header库,我们称之为PROJ。当库头包含另一个时,它使用:#include编译器(gcc和clang)有-Ipath-to-proj-parent.库的用户还应该在他们的包含搜索路径中有PROJ的父级。我使用这个方案的理由是,在将这个库安装到proj之后默认可搜索父目录(/usr/include/proj或/usr/local/include/proj)的子目录,图书馆用户无需指定-I选项。这个方案有缺点吗?正在使用没有proj/前缀是更常规和推荐的方式?问题不是关于是否安装在子目录中(会有proj子目录),而是如何引用包含文件。 最

java - SWIG 将生成的类从不同的模块和包导入当前类

我很难获得SWIGtypemap(javapackage)正常工作。我尝试制作一个简单版本的问题,但似乎也失败了。foo.h:#ifndefFOO_H#defineFOO_HclassFoo{public:Foo(){};intdoSomething(){return1};};#endifbar.h:#ifndefBAR_H#defineBAR_H#include"foo.h"classBar{public:Bar(){};intdoSomething(Foofoo){returnfoo.doSomething();};};#endifFoo.i%moduleFooMod%includ

c++ - 如何直接获取 rand() 序列中的第 n 个数字而不必调用 rand() n 次?

根据我的理解,使用特定种子设置srand会导致对rand()的调用序列每次为该特定种子生成相同的数字系列:例如:srand(seed1);rand()//firstnumber(e.g.:42)rand()//secondnumber(e.g:17)srand(seed1)rand()//firstnumber(sameasabove(42))rand()//secondnumber(sameasabove(17))有没有办法直接获取序列中的第n个数字,而不必调用rand()n次?例如,如果我想要系列中的第17个随机数,我想在一次调用中获得该数字,而不是调用rand()17次。我无法预